package com.ng.desktop.view;

import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;

import com.ng.desktop.services.NGConfiguration;
import com.ng.desktop.view.alimento.AlimentoFrame;
import com.ng.desktop.view.categoria.CategoriaFrame;
import com.ng.desktop.view.dieta.DietaFrame;
import com.ng.desktop.view.intercambio.IntercambioFrame;
import com.ng.desktop.view.receta.RecetaFrame;

public class FrameContainer extends JFrame implements ActionListener {

	private static final long serialVersionUID = 4218532460895412585L;

	private JMenuBar menuBarra;
	private JMenu menuArchivo;
	private JMenu menuAyuda;
	private JMenu menuGestionar;
	private JMenuItem menuItemCategorias;
	private JMenuItem menuItemAlimentos;
	private JMenuItem menuItemRecetas;
	private JMenuItem menuItemIntercambios;
	private JMenuItem menuItemDietas;
	private JMenuItem menuItemSalir;
	private JMenuItem menuAcerca;
	
	private JDesktopPane desktopPane;
	
	private CategoriaFrame categoriaFrame;
	private AlimentoFrame alimentoFrame;
	private RecetaFrame recetaFrame;
	private IntercambioFrame intercambioFrame;
	private DietaFrame dietaFrame;

	public FrameContainer() {
		this.initComponents();
		
		this.buildGui();

		this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
	}
	
	private void initComponents() {
		this.menuBarra = new JMenuBar();
		this.menuArchivo = new JMenu("Archivo");
		menuArchivo.setMnemonic('a');
		this.menuAyuda = new JMenu("Ayuda");
		menuAyuda.setMnemonic('y');
		this.menuAcerca = new JMenuItem("Acerca de...");
		menuAcerca.setMnemonic('a');
		menuAcerca.addActionListener(this);
		this.menuGestionar = new JMenu("Gestionar");
		menuGestionar.setMnemonic('g');
		this.menuItemCategorias = new JMenuItem("Categorías");
		menuItemCategorias.setMnemonic('c');
		menuItemCategorias.addActionListener(this);
		this.menuItemAlimentos = new JMenuItem("Alimentos");
		menuItemAlimentos.setMnemonic('a');
		menuItemAlimentos.addActionListener(this);
		this.menuItemRecetas = new JMenuItem("Recetas");
		menuItemRecetas.setMnemonic('r');
		menuItemRecetas.addActionListener(this);
		this.menuItemIntercambios = new JMenuItem("Intercambios");
		menuItemIntercambios.setMnemonic('i');
		menuItemIntercambios.addActionListener(this);
		this.menuItemDietas = new JMenuItem("Dietas");
		menuItemDietas.setMnemonic('d');
		menuItemDietas.addActionListener(this);
		this.menuItemSalir = new JMenuItem("Salir");
		menuItemSalir.setMnemonic('s');
		menuItemSalir.addActionListener(this);
		this.desktopPane = new JDesktopPane();
	}

	// Component initialization
	private void buildGui() {

		this.setContentPane(desktopPane);

		this.setSize(new Dimension(1024, 600));
		this.setTitle(NGConfiguration
				.getConfiguration(NGConfiguration.APPLICATION_TITLE)
				+ " - v 1.3");

		// Arbol Menu Archivo
		menuArchivo.add(menuGestionar);
		menuArchivo.addSeparator();
		menuArchivo.add(menuItemSalir);

		// Arbol Menu Gestionar
		menuGestionar.add(menuItemCategorias);
		menuGestionar.add(menuItemAlimentos);
		menuGestionar.add(menuItemRecetas);
		menuGestionar.add(menuItemIntercambios);
		menuGestionar.add(menuItemDietas);
		menuGestionar.addSeparator();

		// Arbol Menu Ayuda
		menuAyuda.add(menuAcerca);

		// Barra
		menuBarra.add(menuArchivo);
		menuBarra.add(menuAyuda);
		
		this.setJMenuBar(menuBarra);
	}
	
	@Override
	public void actionPerformed(ActionEvent e) {

		if (e.getSource() == menuItemCategorias) {
			if (categoriaFrame == null || !categoriaFrame.isDisplayable()) {
				categoriaFrame = new CategoriaFrame();
				desktopPane.add(categoriaFrame);
				categoriaFrame.setVisible(true);
			} else {
				categoriaFrame.toFront();
			}
		} else if (e.getSource() == menuItemAlimentos) {
			if (alimentoFrame == null || !alimentoFrame.isDisplayable()) {
				alimentoFrame = new AlimentoFrame();
				desktopPane.add(alimentoFrame);
				alimentoFrame.setVisible(true);
			} else {
				alimentoFrame.toFront();
			}
		} else if (e.getSource() == menuItemRecetas) {
			if (recetaFrame == null || !recetaFrame.isDisplayable()) {
				recetaFrame = new RecetaFrame();
				desktopPane.add(recetaFrame);
				recetaFrame.setVisible(true);
			} else {
				recetaFrame.toFront();
			}
		} else if (e.getSource() == menuItemIntercambios) {
			if (intercambioFrame == null || !intercambioFrame.isDisplayable()) {
				intercambioFrame = new IntercambioFrame();
				desktopPane.add(intercambioFrame);
				intercambioFrame.setVisible(true);
			} else {
				intercambioFrame.toFront();
			}
		} else if (e.getSource() == menuItemDietas) {
			if (dietaFrame == null || !dietaFrame.isDisplayable()) {
				dietaFrame = new DietaFrame();
				desktopPane.add(dietaFrame);
				dietaFrame.setVisible(true);
			} else {
				dietaFrame.toFront();
			}
		} else if (e.getSource() == menuItemSalir) {
			if (JOptionPane.showConfirmDialog(this,
					"¿Está seguro que abandonar la aplicación?", "Salir",
					JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE) == JOptionPane.YES_OPTION) {
				this.dispose();
			}
		} else if (e.getSource() == menuAcerca) {
			new AyudaDialog(this).setVisible(true);
		}

	}

}
